Twelve-Factor App
良い感じのアプリケーションを作るための12のプラクティス
目的
環境差異(開発・検証・本番)を最小化
水平スケールしやすい構成
自動化・運用コストの低減
チーム開発での一貫性確保
12の原則
1. Codebase
単一のコードベースをバージョン管理(Git等)
環境差は設定で吸収
2. Dependencies
依存関係は明示的に宣言・分離
グローバル環境に依存しない(例:package.json, requirements.txt)
設定は環境変数で管理
コードに設定値を埋め込まない(DB URL, APIキー等)
4. Backing Services
DB・キュー・キャッシュは差し替え可能な外部サービスとして扱う
5. Build, Release, Run
実行中にコードを書き換えない
6. Processes
アプリはステートレス
状態はDBや外部ストレージへ
7. Port Binding
アプリ自身がHTTPサーバを持ち、ポートにバインド
Webサーバ(Apache等)に依存しない
8. Concurrency
プロセスの水平スケールで負荷対応
ワーカーやWebを役割分担
9. Disposability
高速起動・安全なシャットダウン
スケールやデプロイに強い
10. Dev/Prod Parity
開発・本番の差異を極力小さく
同種のDB・ミドルウェアを使う
11. Logs
ログはイベントストリーム
ファイルに書かず標準出力へ(集約は基盤側)
12. Admin Processes
マイグレーション等の管理タスクは一時プロセスとして実行